package ar.uade.fain.ai.tpo.controller;

import java.util.HashMap;

import ar.uade.fain.ai.tpo.dao.SeccionDAO;
import ar.uade.fain.ai.tpo.dto.ProductoDTO;
import ar.uade.fain.ai.tpo.dto.SeccionDTO;
import ar.uade.fain.ai.tpo.model.Producto;
import ar.uade.fain.ai.tpo.model.Seccion;

public class AdministracionSeccionControlador implements Controlador {

	private SeccionDAO seccionDAO;

	public AdministracionSeccionControlador() {
		super();
		this.setSeccionDAO(new SeccionDAO()); 
	}

	public SeccionDAO getSeccionDAO() {
		return seccionDAO;
	}

	public void setSeccionDAO(SeccionDAO seccionDAO) {
		this.seccionDAO = seccionDAO;
	}
	
	@Override
	public void init() {
	}

	@Override
	public void destroy() {
	}


	public SeccionDTO buscarSeccion(final Long id) {
		Seccion seccion = getSeccionDAO().buscarPorId(id);
		return map(seccion);
	}
	
	private SeccionDTO map(Seccion seccion) {
		SeccionDTO dto = null;
		if (seccion != null) {
			dto = new SeccionDTO();	
			dto.setId(seccion.getId());
			dto.setNombre(seccion.getNombre());
			final HashMap<ProductoDTO, Integer> stock = 
					new HashMap<ProductoDTO, Integer>();
			for (Producto producto : 
				seccion.getStockProducto().getDisponibles().keySet()) {
				ProductoDTO productoDTO = new ProductoDTO();
				productoDTO.setId(producto.getId());
				productoDTO.setNombre(producto.getNombre());
				stock.put(productoDTO, seccion.getStockProducto()
						.getDisponibles().get(producto));
			}
			dto.setStock(stock);
		}
		return dto;
	}
	
	public Long crearNuevaSeccion(final SeccionDTO seccionDTO) {
		final Seccion seccion = map(seccionDTO);
		getSeccionDAO().guardar(seccion);
		return seccion.getId();
	}
	
	private Seccion map(final SeccionDTO dto) {
		final Seccion seccion = new Seccion(dto.getId(), dto.getNombre());
		for (ProductoDTO productoDTO : dto.getStock().keySet()) {
			Producto producto = new Producto(productoDTO.getId());
			seccion.getStockProducto().getDisponibles().put(
					producto, dto.getStock().get(productoDTO));
		}
		return seccion;
	}

	public void modificarSeccion(final SeccionDTO dto) {
		if (getSeccionDAO().buscarPorId(dto.getId()) != null) {
			final Seccion seccion = map(dto);
			getSeccionDAO().actualizar(seccion);
		}
	}
	
	public void eliminarSeccion(final Long idSeccion) {
		getSeccionDAO().eliminar(idSeccion);
	}
	
}
